#! /bin/bash
# 实现自动化安装 HBase 的一个脚本
((0)) && {
	1.获取用户名和HBase文件名
	2.解压HBase文件至指定文件夹 ~/hbase
	3.进行伪分布配置
}

# 脚本编写声明
echo ""
echo "This automation shell was developed to simplify the HBase installation process"
echo "CopyRight@BIT 05 by WDC"
echo "Last compiled May 7, 2020"
echo ""

get_char()
{
    SAVEDSTTY=`stty -g`
    stty -echo
    stty cbreak
    dd if=/dev/tty bs=1 count=1 2> /dev/null
    stty -raw
    stty echo
    stty $SAVEDSTTY
}

# 注意事项
echo "在执行 ubuntu-hbase 脚本前需要注意："
echo "1、本脚本仅适用于 Ubuntu、CentOS 系统，目前尚未对其他系统做适配"
echo "2、当前用户必须有足够的权限，例如管理员权限"
echo "3、系统已经安装了JDK、Hadoop，并配置了环境变量"
echo "4、HBase安装文件与脚本必须都在home目录下"
echo ""
echo "请按任意键继续!"
echo "或者按 Ctrl+C 退出"
char=`get_char`
echo "操作完成"
echo ""


# 检测用户
echo "正在检测当前用户"
userName=$(env | grep USER | cut -d "=" -f 2)
if [ "$userName" != "root" ]
then
    echo "当前用户是${userName}，非root用户，请一定要保证拥有执行权限"
else
    echo "当前用户为root用户，权限正常"
fi
echo "请按任意键继续!"
char2=`get_char`
echo "操作完成"
echo ""


echo "接下来开始安装HBase："
# 获取当前目录
cd ~
BASE_PATH=$(cd `dirname $0`; pwd)
echo $BASE_PATH

# 输入HBase文件名
echo ""
echo "请输入HBase安装文件名，例如 hbase-1.4.13-bin.tar.gz"
read HBaseName

# 异常处理，输入文件名为空
if [ "$HBaseName" == "" ]
then
    echo "输入文件名为空"
    echo "脚本停止执行"
    exit 0
fi

# 异常处理，名字可能多一个字符
if [ "${HBaseName:0:1}" != "h" ]
then
    HBaseName="${HBaseName:1}"
fi
echo $HBaseName

echo ""
if [ ! -e "${BASE_PATH}/${HBaseName}" ]
then
    echo "文件不存在或无法读取"
    echo "脚本停止执行"
    exit 0
fi

# 解压安装
sudo tar -zxvf "${BASE_PATH}/${HBaseName}"
sudo mv ./"${HBaseName%-*}" ./hbase
sudo chown -R $userName:$userName ./hbase
HBASE_PATH="${BASE_PATH}/hbase"
echo $HBASE_PATH

# HBase配置JDK、Zookeeper
echo "HBase配置JDK、Zookeeper"
echo $JAVA_HOME
# 在第29行输入JAVA_HOME、启用Zookeeper
sed -i "29iexport JAVA_HOME="$JAVA_HOME $HBASE_PATH/conf/hbase-env.sh
sed -i "29iexport HBASE_CLASSPATH="$HBASE_PATH/conf $HBASE_PATH/conf/hbase-env.sh
sed -i "29iexport HBASE_MANAGES_ZK=true" $HBASE_PATH/conf/hbase-env.sh
source $HBASE_PATH/conf/hbase-env.sh
echo ""

# 环境变量配置
echo "环境变量配置"
sudo sed -i '$aexport HBASE_HOME='${HBASE_PATH} /etc/profile
sudo sed -i '$aexport PATH=$PATH:$HBASE_HOME/sbin:$HBASE_HOME/bin' /etc/profile
source /etc/profile
# 测试hbase
hbase version

# 伪分布式配置
echo ""
echo "开始伪分布式配置"
# 配置core-site.xml
sed -i '23,$d' $HBASE_PATH/conf/hbase-site.xml
echo "<configuration>" >> $HBASE_PATH/conf/hbase-site.xml
echo "  <property>" >> $HBASE_PATH/conf/hbase-site.xml
echo "      <name>hbase.rootdir</name>" >> $HBASE_PATH/conf/hbase-site.xml
echo "      <value>hdfs://localhost:9000/hbase</value>" >> $HBASE_PATH/conf/hbase-site.xml
echo "  </property>" >> $HBASE_PATH/conf/hbase-site.xml
echo "  <property>" >> $HBASE_PATH/conf/hbase-site.xml
echo "      <name>hbase.cluster.distributed</name>" >> $HBASE_PATH/conf/hbase-site.xml
echo "      <value>true</value>" >> $HBASE_PATH/conf/hbase-site.xml
echo "  </property>" >> $HBASE_PATH/conf/hbase-site.xml
echo "  <property>" >> $HBASE_PATH/conf/hbase-site.xml
echo "      <name>hbase.unsafe.stream.capability.enforce</name>" >> $HBASE_PATH/conf/hbase-site.xml
echo "      <value>false</value>" >> $HBASE_PATH/conf/hbase-site.xml
echo "  </property>" >> $HBASE_PATH/conf/hbase-site.xml
echo "</configuration>" >> $HBASE_PATH/conf/hbase-site.xml
echo "hbase-site.xml 配置完成!"

# HBase安装完成
echo ""
echo "HBase自动安装完成，伪分布式配置完成~"
echo "重新打开终端即可使用HBase"
echo "脚本执行完成，see you~"
echo ""
